#include "inc.h"

int main(int argc, char const *argv[])
{
    printf("main pid = %d\n", getpid());

    int iNum = 100;

    pid_t pid = fork();

    if( pid > 0 )
    {
        // 此处为 父进程 执行的代码
        printf("----This is Parent Proccess----\n");
        printf("    forked pid = %d, self pid = %d, parent pid = %d\n",
                pid, getpid(), getppid());
        printf( "parant iNum %d\n", iNum );
    }
    else if ( 0 == pid )
    {
        // 此处为 子进程 执行的代码
        printf("----This is Child    Proccess----\n");
        printf("    self pid = %d, father pid = %d\n", getpid(), getppid());
        
        iNum = 200;
        printf( "child iNum %d\n", iNum );
        
    }
    else
    {
        perror("fail fork");
        return -1;
    }

    // 此处为 父进程 和 子进程 都执行的代码
    printf( "PID %d over\n", getpid() );
    printf( "over iNum %d\n", iNum );

    sleep(1);

    return 0;
}

/*
程序功能
    创建一个子进程, 父进程和子进程打印各自的 pid 和 ppid

涉及函数
    fork
    getpid
    getppid

知识要点
    在fork之后, 子进程完全拷贝父进程的4G虚拟内存空间, 完全独立, 改变自己的数据完全不影响另外的进程. 
    子进程和父进程的不同的数据有:
        fork 返回值不同
        pid 不同

    fork 的原子操作: 
    {
        pid = fork;
        if      ( pid >  0 )  
        {
            // 此处为 父进程 执行的代码
        }
        else if ( pid == 0 )  
        {
            // 此处为 子进程 执行的代码
        }
        else
        {
            // fail fork
        }                  

        // 此处为 父进程 和 子进程 都执行的代码
    }
*/